图层控制管理

最后更新时间:2019年7月5日

地图是由多个图层按照上下顺序叠加到一起组成的,每个图层都展示一部分的地理信息。例如,用户看到的居民区、绿地区域、水域、道路、兴趣点等等,都可以由单独的图层来展现。图层控制管理包括对地图中图层进行可见性、状态的控制,以及图层的叠加、移动、移除等操作管理。

1 图层可见性控制 Sample详情

在实际应用中,我们经常需要隐藏某些叠加在上层的图层,从而来观察下面图层的情况,这时候就需要利用到图层的显示控制,这是一个非常常用且容易实现的功能。图层显示控制功能的核心代码如下所示:

//获取地图、图层
MGSMap *map=mMapView.map;
MGSMapLayer *mapLayer=[map getLayerAtIndex:0];
//控制图层可见性
if (mapLayer.visible){
    mapLayer.visible = NO;       //设置图层隐藏
} else {
    mapLayer.visible = YES;      //设置图层可见
}

也可利用state属性来设置图层状态来控制是否可见、是否可编辑。

2 图层管理 Sample详情

在地图显示之后,可以根据需要对地图中的图层进行管理。例如在已有地图中叠加新的图层、移动图层、移除图层。

(1) 图层叠加

在移动端加载地图数据,与桌面端类似,当前地图容器(MGSMapView)中只能加载一个地图文档(mapx),并且只能激活打开一个地图(MGSMap)。但在实际应用中,可能需要将不同来源的地图数据同时显示,那么就需要使用到地图叠加的功能,本地矢量数据、本地瓦片数据、在线服务地图数据都可以作为图层(MGSMapLayer)进行叠加。

重要说明:要确保叠加的图层和原有地图的空间参考系一致,这样叠加的效果才能显示正确。

//地图文档路径
NSString *mapPath=[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:@"/MapGIS Mobile 2D Sample/Map/MapShow/WuHan/WuHan.mapx"];
//初始加载离线矢量地图作为底图(Web墨卡托投影坐标系)
[_mapView loadFromFile:path];
//叠加地图:在底图加载完成后再叠加地图
//创建地图服务对象(类型为谷歌影像,同为Web墨卡托投影坐标系)
MGSMapServer* mapServer = [MGSServerLayer createMapServerByType:MAPSERVER_TYPE_GOOGLE_SATELLITEMAP];
//创建服务图层
MGSServerLayer *serverLayer=[[MGSServerLayer alloc] init];
[serverLayer setMapServer:mapServer];    //设置地图服务即数据源
[serverLayer setName:@"Google服务图层"];  //设置图层名称
//叠加图层,添加到顶层
[self.mapView.map append:serverLayer];
//强制刷新
[self.mapView forceRefresh];

实现图层叠加的效果可采用多种方法实现:

接口 功能
append: 添加图层
insert:atIndex: 插入图层
dragIn:andIndex: 拽入图层

其中append方法是将图层叠加到地图顶层,显示在最上层;insert和dragIn方法可以将图层插入到地图中的任何位置。

(2) 图层移动

利用图层移动接口方法可以调整图层的压覆顺序,达到图层叠加展示效果的调整。

说明:根据地图组织的规则,图层索引从0开始,索引值越小,越先绘制,显示在越底层;索引值越大,越后绘制,显示在越上层。

//将索引为1的图层移至索引为2的位置
[mapView.map moveFromIndex:1 toIndex:2];

除此方法外,MGSMap类还提供了其他的接口实现图层移动功能。

接口 功能
moveFromIndex:toIndex: 将指定索引的图层从图层目录的一个索引处移到另一个索引处
moveToBottom: 移动图层到最下面(最后绘制)
moveToDown: 下移图层
moveToTop: 移动图层到最上面(最先绘制)
moveToUp: 上移图层

(3)图层移除

利用图层移除接口可以将图层从地图中移除。

[mapView.map remove:1];     //根据索引移除图层

达到图层移除的效果可采用多种方法实现:

接口 功能
remove: 移除指定的图层
removeFromIndex:andCount: 移除指定索引开始后面指定数目的图层
removeAtIndex: 移除指定索引的图层
removeAll 移除所有图层,同时销毁图层
dragOut: 移除图层,不会销毁图层

说明:移除图层,不会将真正的图层数据删除,只是在当前显示的地图中移除此图层,也可再叠加上。利用remove系列方法移除图层时,会将其MapLayer对象销毁,如果移除后又需要叠加到map中,则MapLayer需要重新构建。dragOut方法移除时不会销毁图层。